import os  # 用于文件和目录操作
import shutil  # 用于高级文件操作，如移动文件夹

# 源文件夹路径，即包含所有待分类文件夹的根目录
source_folder = r'C:\Users\77265\Desktop\测试人员0'
# 第一类文件夹的目标路径，用于存放符合特定条件的文件夹
target_folder_1 = os.path.join(source_folder, '第一类文件夹')
# 第二类文件夹的目标路径，用于存放不符合第一类条件的文件夹
target_folder_2 = os.path.join(source_folder, '第二类文件夹')

# 创建目标文件夹，如果已存在则不会报错
os.makedirs(target_folder_1, exist_ok=True)
os.makedirs(target_folder_2, exist_ok=True)

# 定义图片文件的扩展名，用于判断文件是否为图片
image_extensions = ('.png', '.jpg', '.jpeg', '.bmp', '.gif')

# 遍历源文件夹中的所有项目（文件和文件夹）
for folder_name in os.listdir(source_folder):
    folder_path = os.path.join(source_folder, folder_name)
    # 跳过非文件夹项目
    if not os.path.isdir(folder_path):
        continue

    # 初始化真值文件夹和删除文件夹的路径为None
    truth_folder = None
    delete_folder = None

    # 遍历当前文件夹中的所有子项目
    for sub_folder_name in os.listdir(folder_path):
        sub_folder_path = os.path.join(folder_path, sub_folder_name) #子文件的绝对路径，现在视图为真值文件夹和删除文件夹
        # 只处理子文件夹
        if os.path.isdir(sub_folder_path):
            # 如果子文件夹名称包含"真值"，记录其路径
            if "真值" in sub_folder_name:
                truth_folder = sub_folder_path
            # 如果子文件夹名称包含"删除"，记录其路径
            elif "删除" in sub_folder_name:
                delete_folder = sub_folder_path

    # 检查真值文件夹中是否包含图片
    has_image_in_truth = False
    if truth_folder:  # 如果存在真值文件夹     #如果没有真值文件夹，那么truth_folder = None
        # 遍历真值文件夹中的所有文件
        for file_name in os.listdir(truth_folder):
            # 判断文件是否为图片（通过扩展名匹配）
            if file_name.lower().endswith(image_extensions):
                has_image_in_truth = True
                break  # 找到一张图片后就不再继续检查

    # 判断文件夹是否符合第一类的条件：
    # 1. 有删除文件夹但没有真值文件夹
    # 2. 有删除和真值文件夹，但真值文件夹中没有图片
    if (delete_folder and not truth_folder) or (delete_folder and truth_folder and not has_image_in_truth): #隐式转换类型，空字符串为False
        # 移动到第一类文件夹
        shutil.move(folder_path, target_folder_1)
    else:
        # 移动到第二类文件夹
        shutil.move(folder_path, target_folder_2)